/**
*
*/
package org.javacommerce.paypal.servlet;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.javacommerce.paypal.IPN;
import org.javacommerce.paypal.PayPalValidationException;
import org.javacommerce.paypal.validation.IPNValidation;
/**
* Abstract servlet used to validate IPN's. Extend as needed, implementing the abstract
* processIPN(IPN) method.
* @author Michael Blanton (mike@mikeblanton.com)
*/
public abstract class AbstractIPNServlet extends BaseServlet {
/**
*
*/
private static final long serialVersionUID = -3962197341566616746L;
private static Log LOG = LogFactory.getLog(AbstractIPNServlet.class);
/**
*
*/
public AbstractIPNServlet() {
super();
// TODO Auto-generated constructor stub
}
/* (non-Javadoc)
* @see org.javacommerce.paypal.servlet.BaseServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
protected void doGet(HttpServletRequest _request, HttpServletResponse _response)
throws ServletException, IOException {
notAllowed(_response, "POST");
}
/* (non-Javadoc)
* @see org.javacommerce.paypal.servlet.BaseServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
protected void doPost(HttpServletRequest _request, HttpServletResponse _response)
throws ServletException, IOException {
try {
if (LOG.isDebugEnabled()) {
LOG.debug("IPN received, verifying");
}
String[] response = IPNValidation.getInstance().verifyHttpRequest(_request);
if (LOG.isDebugEnabled()) {
LOG.debug("IPN verified, processing");
}
IPN ipn = new IPN(_request, response[0]);
processIPN(ipn);
writeObject(ipn, _response);
} catch (UnsupportedEncodingException e) {
writeException("IPN-1000", "Error verifying IPN", null, e, _response);
_response.setStatus(SC_NOT_ACCEPTABLE);
} catch (IOException e) {
writeException("IPN-1001", "Error verifying IPN", null, e, _response);
_response.setStatus(SC_NOT_ACCEPTABLE);
} catch (PayPalValidationException e) {
writeException("IPN-1002", "Error verifying IPN", null, e, _response);
_response.setStatus(SC_NOT_ACCEPTABLE);
}
}
/* (non-Javadoc)
* @see org.javacommerce.paypal.servlet.BaseServlet#doPut(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
protected void doPut(HttpServletRequest _request, HttpServletResponse _response)
throws ServletException, IOException {
notAllowed(_response, "POST");
}
protected abstract void processIPN(IPN _ipn) throws PayPalValidationException;
}